Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Дослідження програмної моделі блоків DCACHE і ІCACHE з моделі RISC CPU

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2014
Тип роботи:
Лабораторна робота
Предмет:
Комп ютерні системи менеджменту малого та середнього бізнесу

Частина тексту файла

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра ЕОМ Звіт до лабораторної роботи №6 з дисципліни: «Комп’ютерні системи» на тему: «Дослідження програмної моделі блоків DCACHE і ІCACHE з моделі RISC CPU» Львів – 2014 Мета роботи: 1. Дослідити програмну модель блоків DCACHE і ІCACHE, які входять до складу програмної моделі RISK CPU, створеної на мові SystemC. 2. Побудувати структурну схему блоків DCACHE і ІCACHE. Програмна модель блоку DCACHE: dcache.h: struct dcache : sc_module { sc_in<signed> datain; // input data sc_in<unsigned> statein; // input state bit MESI(=3210) sc_in<bool> cs; // chip select sc_in<bool> we; // write enable sc_in<unsigned > addr; // address sc_in<unsigned> dest; // write back to which register sc_out<unsigned> destout; // write back to which register sc_out<signed> dataout; // dataram data out sc_out<bool> out_valid; // output valid sc_out<unsigned> stateout; // state output sc_in_clk CLK; // Parameter unsigned *dmemory; // data memory unsigned *dsmemory; // data state memory unsigned *dtagmemory; // tag memory int wait_cycles; // cycles # it takes to access dmemory void init_param(int given_delay_cycles) { wait_cycles = given_delay_cycles; } //Constructor SC_CTOR(dcache) { SC_CTHREAD(entry, CLK.pos()); // initialize instruction dmemory from external file FILE *fp = fopen("dcache","r"); int size=0; int i=0; unsigned mem_word; dmemory = new unsigned[4000]; dsmemory = new unsigned[4000]; dtagmemory = new unsigned[4000]; printf("** ALERT ** DCU: initialize Data Cache\n"); while (fscanf(fp,"%x", &mem_word) != EOF) { dmemory[size] = mem_word; dsmemory[size] = 0; dtagmemory[size] = size; size++; } for (i=size; i<4000; i++) { dtagmemory[i] = 0xdeadbeef; dmemory[i] = 0xdeadbeef; dsmemory[i] = 0; } } // Process functionality in member function below void entry(); }; dcache.cpp: #include <iostream.h> #include "systemc.h" #include "dcache.h" #include "directive.h" void dcache::entry() { unsigned int address; // address to DataCache unsigned int reg_tmp=0; unsigned int dest_tmp = 0; while (true) { wait_until(cs.delayed() == true); dest_tmp = dest.read(); reg_tmp = dest.read(); address = addr.read(); if (we.read() == true) { // Write operation wait(); out_valid.write(false); dmemory[address] = datain.read(); dsmemory[address] = statein.read(); dtagmemory[address] = addr.read(); cout << "\t\t\t\t\t\t\t-------------------------------" << endl; printf("\t\t\t\t\t\t\tDCU :St %x->mem[%d]", dmemory[address], address); cout << " at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t\t\t\t\t-------------------------------" << endl; wait(); } else { // Read operation wait(); dataout.write(dmemory[address]); stateout.write(dsmemory[address]); destout.write(dest_tmp); out_valid.write(true); cout << "\t\t\t\t\t\t\t-------------------------------" << endl; printf("\t\t\t\t\t\t\tDCU :ld %d<-mem[%d]->R%d\n", dmemory[address], address, dest_tmp); printf("\t\t\t\t\t\t\tDCU :Tag = 0x%x", dtagmemory[address]); if (dsmemory[address] == 3) { printf(" (M)"); } else if (dsmemory[address] == 2) { printf(" (E)"); } else if (dsmemory[address] == 1) { printf(" (S)"); } else if (dsmemory[address] == 0) { printf(" (I)"); } else printf(" (X)"); cout << " at CSIM " << sc_time_stamp() << endl; cout << "\t\t\t\t\t\t\t-------------------------------" << endl; wait(); out_valid.write(false); wait(); } } }  Рис. 1. Структурна схема блока DCACHE icache.h: #define BOOT_LENGTH 5 #define MAX_CODE_LENGTH 500 struct icache : sc_module { sc_in<unsigned > datain; // modified instruction...
Антиботан аватар за замовчуванням

28.09.2014 22:09

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини